package com.zlt.dao;

import com.zlt.dao.Impl.AdminDaoImpl;
import com.zlt.entity.Admin;
import com.zlt.entity.Company;
import com.zlt.entity.License;
import com.zlt.entity.Question;

import java.sql.SQLException;
import java.util.List;

public interface AdminDao {
    static AdminDao getInstance() {
        return AdminDaoImpl.INSTANCE;
    }

    /**
     * 查询是否存在该用户
     * 不存在返回null
     *
     * @param username 用户名
     * @return Admin对象
     * @throws SQLException
     */
    Admin existedByUsername(String username) throws SQLException;

    /**
     * 列出所有的公司
     *
     * @param start 位偏移量
     * @param end   行数
     * @return
     * @throws SQLException
     */
    List<Company> listCompany(Integer start, Integer end) throws SQLException;

    /**
     * 查询指定状态的公司
     *
     * @param start 位偏移量
     * @param end   行数
     * @param state 状态值
     * @return
     * @throws SQLException
     */
    List<Company> listCompany(Integer start, Integer end, Integer state) throws SQLException;

    /**
     * 查询指定状态公司的数量
     *
     * @param state 状态值
     * @return
     * @throws SQLException
     */
    Long countCompany(Integer state) throws SQLException;

    /**
     * 查询所有的反馈
     *
     * @param start
     * @param end
     * @return
     * @throws SQLException
     */
    List<Question> listQuestions(Integer start, Integer end) throws SQLException;

    /**
     * 列出指定状态的反馈
     *
     * @param start
     * @param end
     * @param state 反馈状态
     * @return
     * @throws SQLException
     */
    List<Question> listQuestions(Integer start, Integer end, Integer state) throws SQLException;

    /**
     * 查询指定状态反馈的数量
     *
     * @param state 状态值
     * @return
     * @throws SQLException
     */
    Long countQuestion(Integer state) throws SQLException;

    /**
     * 改变企业的状态
     *
     * @param cid   公司id
     * @param state 状态码
     * @return
     * @throws SQLException
     */
    Integer updateCompanyState(Integer cid, Integer state) throws SQLException;

    /**
     * 通过cid查询许可证
     *
     * @param cid 公司id
     * @return
     * @throws SQLException
     */
    List<License> selectLicencesByCid(Integer cid) throws SQLException;
}
